﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SMA.GENTEv1.Dados;

namespace SMA.GENTEv1
{
    public class Menu
    {
        #region Variaveis Membro
        private int _idMenu;
        private int _idMenuAba;
        private string _nomeMenuAba;
        private int _idPai;
        private string _nomeMenu;
        private string _tituloPagina = string.Empty;
        private string _descricaoPagina = string.Empty;
        private string _url = string.Empty;
        private int _ordem;
        private Status _status;
        private string _Funcionalidade = string.Empty;
        private GENTEEntities _context;
        #endregion

        #region Propriedades
        public int IdMenu
        {
            get { return _idMenu; }
            set { _idMenu = value; }
        }
        public int IdMenuAba
        {
            get { return _idMenuAba; }
            set { _idMenuAba = value; }
        }
        public int IdPai
        {
            get { return _idPai; }
            set { _idPai = value; }
        }
        public string NomeMenuAba
        {
            get { return _nomeMenuAba; }
            set { _nomeMenuAba = value; }
        }
        public string NomeMenu
        {
            get { return _nomeMenu; }
            set { _nomeMenu = value; }
        }
        public string TituloPagina
        {
            get { return _tituloPagina; }
            set { _tituloPagina = value; }
        }
        public string DescricaoPagina
        {
            get { return _descricaoPagina; }
            set { _descricaoPagina = value; }
        }
        public string Url
        {
            get { return _url; }
            set { _url = value; }
        }
        public int Ordem
        {
            get { return _ordem; }
            set { _ordem = value; }
        }
        public Status Status
        {
            get { return _status; }
            set { _status = value; }
        }
        public string Funcionalidade
        {
            get { return _Funcionalidade; }
            set { _Funcionalidade = value; }
        }
        #endregion

        #region Construtores
        public Menu()
        {
            try 
	        {	        
		        _context = new GENTEEntities();
	        }
	        catch (Exception ex)
	        {	
		        throw ex;
	        }       
        }
        public Menu(int idMenu)
        {
            try 
            {	        
                _context = new GENTEEntities();
                Carregar(idMenu);	
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #region Metodos Privados
        private void Carregar(int idMenu)
        {
            try
            {
                var consulta = from menu in _context.tab_menu
                               where menu.id_menu == idMenu
                               select new
                               {
                                   menu.id_menu,
                                   menu.tab_menu_aba.id_menu_aba,
                                   nome_menu_aba = menu.tab_menu_aba.descricao,
                                   menu.id_pai,
                                   menu.nome_menu,
                                   menu.titulo_pagina,
                                   menu.descricao_pagina,
                                   menu.url,
                                   menu.ordem,
                                   menu.tab_status.id_status,
                                   menu.funcionalidade
                               };

                
                var listConsulta = consulta.ToList();

                foreach (var list in listConsulta)
                {
                    this._idMenu = list.id_menu;
                    this._idMenuAba = list.id_menu_aba;
                    this._nomeMenuAba = list.nome_menu_aba;
                    this._idPai = (list.id_pai == null) ? 0 : Int32.Parse(list.id_pai.ToString());
                    this._nomeMenu = list.nome_menu;
                    this._tituloPagina = list.titulo_pagina;
                    this._descricaoPagina = list.descricao_pagina;
                    this._url = list.url;
                    this._ordem = (list.ordem == null) ? 0 : Int32.Parse(list.ordem.ToString());
                    this._status = new Status(list.id_status);
                    this._Funcionalidade = list.funcionalidade;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #region Metodos Publicos

        public List<Menu> SelectAll()
        {
            try
            {
                List<Menu> listMenu = new List<Menu>();

                var consulta = from menu in _context.tab_menu
                               orderby menu.id_pai, menu.ordem
                               select new
                               {
                                   menu.id_menu,
                                   menu.tab_menu_aba.id_menu_aba,
                                   nome_menu_aba = menu.tab_menu_aba.descricao,
                                   menu.id_pai,
                                   menu.nome_menu,
                                   menu.titulo_pagina,
                                   menu.descricao_pagina,
                                   menu.url,
                                   menu.ordem,
                                   menu.tab_status.id_status,
                                   menu.funcionalidade
                               };

                var listConsulta = consulta.ToList();

                foreach (var list in listConsulta)
                {
                    Menu menu = new Menu();
                    menu._idMenu = list.id_menu;
                    menu._idMenuAba = list.id_menu_aba;
                    menu._nomeMenuAba = list.nome_menu_aba;
                    menu._idPai = (list.id_pai == null) ? 0 : Int32.Parse(list.id_pai.ToString());
                    menu._nomeMenu = list.nome_menu;
                    menu._tituloPagina = list.titulo_pagina;
                    menu._descricaoPagina = list.descricao_pagina;
                    menu._url = list.url;
                    menu._ordem = (list.ordem == null) ? 0 : Int32.Parse(list.ordem.ToString());
                    menu._status = new Status(list.id_status);
                    menu._Funcionalidade = list.funcionalidade;

                    listMenu.Add(menu);
                }
                return listMenu;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public List<Menu> SelectAba(int idMenuAba)
        {
            try
            {
                List<Menu> listMenu = new List<Menu>();

                var consulta = from menu in _context.tab_menu
                               where menu.tab_menu_aba.id_menu_aba == idMenuAba
                               && menu.tab_status.id_status == 1
                               orderby menu.id_pai, menu.ordem
                               select new
                               {
                                   menu.id_menu,
                                   menu.tab_menu_aba.id_menu_aba,
                                   nome_menu_aba = menu.tab_menu_aba.descricao,
                                   menu.id_pai,
                                   menu.nome_menu,
                                   menu.titulo_pagina,
                                   menu.descricao_pagina,
                                   menu.url,
                                   menu.ordem,
                                   menu.tab_status.id_status,
                                   menu.funcionalidade
                               };

                var listConsulta = consulta.ToList();

                foreach (var list in listConsulta)
                {
                    Menu menu = new Menu();
                    menu._idMenu = list.id_menu;
                    menu._idMenuAba = list.id_menu_aba;
                    menu._nomeMenuAba = list.nome_menu_aba;
                    menu._idPai = (list.id_pai == null) ? 0 : Int32.Parse(list.id_pai.ToString());
                    menu._nomeMenu = list.nome_menu;
                    menu._tituloPagina = list.titulo_pagina;
                    menu._descricaoPagina = list.descricao_pagina;
                    menu._url = list.url;
                    menu._ordem = (list.ordem == null) ? 0 : Int32.Parse(list.ordem.ToString());
                    menu._status = new Status(list.id_status);
                    menu._Funcionalidade = list.funcionalidade;

                    listMenu.Add(menu);
                }
                return listMenu;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        #endregion
    }
}
